快速了解
DevOps-SRE工程師
技術面試問題與核心能力
今天的文章專注在DevOps-SRE工程師的第二個問題,來到比較難的 系統設計
!
主考官的目的
:設計一個能夠支持從零到百萬人數規模的系統
,是每個DevOps或SRE工程師都需要掌握的技能,測試你對雲端服務設計、配置的深度理解,這是一道非常具挑戰性的考題
。準備方式
:系統設計考題較難準備,建議整理過往工作經驗中複雜系統的實例以及經典的雲端架構,列出當時如何執行的方式作為參考。參考標準
:設計一個能夠支持從零到百萬人數規模的系統,我們應該先切成下列幾個階段來分析,參考下面的答案千里之行,始於足下。讓我們先從最簡單的開始。
在這種架構下,所有的元件包括Web伺服器、資料庫和快取,都執行在 同一個虛擬機器
內。這種架構適合在服務剛開發、使用者數量較少的初期階段,以 最低的成本達到最高的效益
。
隨著使用者數量增加,單一伺服器可能無法滿足需求,這時需要 擴展為多台伺服器的架構
。
首先,我們會將一台伺服器作為Web伺服器,負責處理API流量(Web 層),另一台伺服器則作為資料庫伺服器(資料層)。透過這樣的分層架構,每台伺服器負責不同的功能,後續可以獨立擴展每個層級的伺服器,以應對更高的流量需求。
隨著使用者增多,我們可以將原先的單體架構升級為 高可用架構(High Available)
。
首先為了對Web層進行水平擴展,我們會使用負載平衡器(Load Balancer)來分配流量,使多個Web伺服器可以動態擴展以應對不同的流量需求。
負載平衡器(load balancer)
:負載平衡器將進入的網路流量分配到多個後端伺服器上,確保每個伺服器承受的流量均衡,避免單一伺服器過載。水平擴展
:web層水平擴展,會動態將web伺服器數目增加,以應付更多負載平衡器的流量請求。隨著流量增加, 單一資料庫
可能無法滿足Web層的存取需求,因此我們需要對資料層進行 水平擴展
。
我們採用 資料庫複寫的主從架構
(Master-Slave),寫入和更新操作只寫到主資料庫(Master),然後主資料庫將資料複製到從資料庫(Slave),讀取操作則從從資料庫進行。這樣可以有效地分散讀寫負載,達成資料庫的擴展。
在高流量情況下,可能會有 二十幾個以上的虛擬機器
同時對資料庫進行請求。雖然 資料庫的垂直擴展
可以透過增加CPU和記憶體來提升效能,但這種方式最終會達到硬體的極限。此時,我們需要透過水平擴展來增加資料庫的容量,主從架構是其中一種有效的方案。
資料庫複寫的主從架構
:水平擴展方法,它通過將數據從主資料庫(Master)複製到一個或多個從資料庫(Slave),使資料庫具備讀寫分離的能力。資料庫的垂直擴展
:增加單一伺服器的硬體資源(如增加 CPU、內存、硬碟等)來提高資料庫的效能。快取與CDN
是提升回應速度和用戶體驗的常用手段,這兩部分都需要設置 生命週期(TTL)
來確保資料及時刷新。
在實際應用中,不一定需要按照特定的水平擴展順序導入快取和CDN。根據具體情況,有時可以先引入快取或CDN來降低系統負擔和執行成本。最重要的是根據實際需求靈活應用,沒有標準答案。
快取(cache)
:快取是一個臨時的儲存區域,可以暫存高頻存取的資料,減少對資料庫的直接訪問,從而加快後續的處理速度。我們通常使用Redis集群
作為快取層,減輕資料庫的讀寫負擔,提升系統效能。內容傳遞網路(CDN)
:CDN是一種分布式的網路,可以在全球各地提供靜態資源,如圖片和影片。使用CDN來傳遞不會經常變動的內容,可以降低Web伺服器的負擔,並提高全球用戶的訪問速度
。這種架構適用於需要服務 全球用戶
的應用。通常,我們會在亞洲、美洲和歐洲建立資料中心,確保三大洲的使用者都能獲得最佳體驗。如果某個資料中心發生重大故障,我們會將流量導向可以正常運作的資料中心,以提供備援。
在設計高可用架構時,關鍵是確保 無狀態的Web伺服器層
,這樣才能實現水平擴展。 GeoDNS地理路由設計
能有效地將流量導向多個區域中心,而多區域部署則能確保全球用戶獲得最佳的服務體驗。定期檢查各資料中心的健康狀況,並確保有完善的 故障轉移機制
,是保持高可用性的核心策略。
無狀態網路層
:確保所有Web伺服器都是無狀態的,這樣可以進行水平擴展而不會有狀態的差異。多區域資料中心
:根據不同國家的使用者需求,部署多區域資料中心,確保用戶能夠就近存取資源,降低延遲(latency )。GeoDNS地理路由
:利用地理路由技術
,將不同國家的使用者導向最近的資料中心,進一步降低延遲,提高效能。假設你是 麥當勞的DevOps工程師
,你需要考慮全球各地麥當勞服務的可用性,以及 不同時區
的 尖峰和離峰訂餐需求
。
高可用性架構需要隨著不同的商業邏輯進行調整,以滿足各地用戶的需求。
隨著流量不斷增加,我們會遇到 大量請求無法即時處理
的情況,需要先將請求寫入一個緩衝區,再由對應的工作程序逐步消化。
這就像在Costco 或商店裡,很多客戶同時結帳,但收銀員無法立即服務每個人,這時客戶會排隊,等待逐一處理。 訊息序列(Message Queue )
正是扮演這樣的角色,讓請求排隊,然後由工作程序逐漸消化。
緩衝區
:訊息序列作為緩衝區,負責發放各種非同步請求。生產者-消費者模型
:我們使用生產者-消費者模型,生產者將訊息發送到序列中,消費者負責處理這些訊息。這種模型具有解耦的效果,使應用程序更具可擴展性和可靠性。在大型系統中,通常會支援 日誌記錄
、 衡量指標的監控
和 CICD自動化
。這些工具能幫助監控系統效能,提升生產力,並持續整合和確認生產環境的狀況。管理者可以利用各種雲端工具來了解系統的狀態,通常我們會分成兩個層面的監控:
系統層級監控
:監控各種資源的使用情況,如CPU和記憶體
的使用量是否超過限度。應用層級監控
:監控應用的執行狀況,例如:API的4xx錯誤數量
是否過多,以檢測應用問題。這些設計的最終目標是管理龐大而複雜的系統,維持服務的穩定性與高可用性。
假設你管理一個擁有 六億會員的全球應用
,這些會員的購物車操作和結帳刷卡等行為會產生大量請求。為了應對這些請求,我們需要使用訊息序列來建構各個微服務,確保系統的穩定性和可擴展性。
在這個系統設計的考題中,我們介紹了由淺入深的7種伺服器架構。隨著應用使用人數的增加與請求量的不同量級,進一步還可以進行 資料庫分片
。
考題重點在於隨著應用複雜度的提升,必須具備足夠的知識來設計 更高效、更低成本的系統架構
,同時能夠靈活應用在雲端環境中,以應對現實中的各種商業邏輯。
以下是提供一些關鍵點,幫助大家研究如何在高可用性的擴展中進行設計,從而提高複雜系統的可用度:
思考百萬級使用者
:設計能夠支持大量同時使用者的系統架構。無狀態Web伺服器
:保持Web應用無狀態,以便於水平擴展。冗餘設計
:在每一層都保留一定的冗餘資源,以防止單點故障。快取
:儘可能多地快取常用資料,減少對後端系統的壓力。多資料中心
:在多個資料中心區域部署系統,以提高可用性和降低延遲。CDN
:使用CDN託管靜態資料,提高全球用戶的訪問速度。資料分片
:利用資料分片技術,擴展資料庫的處理能力。服務拆分
:將各層切分成單獨的微服務,增加靈活性和可維護性。監控與自動化
:監控系統效能,善用自動化工具,以提升效率。謝謝你努力到現在,技術面試的文章真的是很硬,有努力看完請給自己一個讚!
第31天的文章,我們專注於了解 Q2.【系統設計】建構從零到百萬人數規模的系統。
,這個系統設計題目非常硬喔!目前面試經驗中,沒有遇到幾個面試者能夠融會貫通現有知識並回答得出來,這樣等級的系統設計題目需要深厚的功力。不同類型系統設計問題,可以知道你是否了解如何設計符合企業當下的雲端架構系統,並根據業務邏輯來進行優化。這種問題真的是台上10分鐘,台下10年功!
DevOps/SRE工程師的技術面試,需要更多針對雲端技術知識和實踐經驗,並且能夠設計和維運高效的企業系統,如同前面說明的核心能力。最後再藉由工作經驗的提升,逐漸在往雲端架構師或是資安專家等進階工種邁進!
雲端服務知識
:熟悉至少一個主要雲端服務平台(如AWS、GCP、Azure)的管理控制台和核心服務(如計算、儲存、網路、資料庫)。除了能夠設置和管理雲端基礎設施,還可以運用更多系統設計概念,確保其高可用性和擴展性。操作系統管理
:熟練操作和管理Linux和Windows作業系統,能夠進行系統安裝、配置、管理和故障排除。能夠在雲端環境中管理和優化虛擬機和容器。持續交付與自動化
:設計和實施持續交付(CI/CD)流水線(pipeline),確保軟體能夠快速且可靠地部署到生產環境。使用自動化工具(如Jenkins、GitLab CI、Terraform、Ansible )進行配置管理和基礎設施自動化。安全控制與合規
:實施並自動化安全控制、治理流程和合規驗證,管理雲端環境中的身分和訪問管理(IAM)策略,確保符合安全合規要求。定期進行安全審計和風險評估,確保系統和資料的安全性。系統監控與故障排除
:定義和部署監控、指標和日誌系統(如Prometheus、Grafana、ELK Stack ),監控系統效能和可用性。能夠快速識別和解決系統故障,確保服務的穩定執行。高可用性與可擴展性
:設計和實施高可用性、可擴展和自我修復的系統架構,使用負載均衡(Load balancing)和自動縮放(Auto Scaling)技術來優化系統效能。確保系統在高負載情況下的穩定性和響應能力。自動化營運流程
:設計、管理和維護自動化營運流程,確保營運效率和系統穩定性。使用自動化工具和腳本(如Python、Bash)來簡化重複性任務和流程。業務連續性與災難恢復
:設計並執行業務連續性和災難恢復計畫,確保資料和服務的持續性和可恢復性。使用快照、備份和多區域部署等技術來保障業務連續性。網站可靠性工程實踐(SRE)
:將網站可靠性工程實踐應用於服務,實施服務監控策略,優化服務效能,並確保系統的可靠性和可用性。定期進行效能測試和容量規劃,確保系統能夠應對未來的需求增長。有問題歡迎留言,看到立馬解答